package com.gjx.leetcode;

import java.util.ArrayList;
import java.util.List;

//77. 组合
//
//给定两个整数 n 和 k，返回 1 ... n 中所有可能的 k 个数的组合。
//
//示例:
//
//输入: n = 4, k = 2
//输出:
//[
//  [2,4],
//  [3,4],
//  [2,3],
//  [1,2],
//  [1,3],
//  [1,4],
//]


public class Solution077 {
	public List<List<Integer>> combine(int n, int k) {
        List<List<Integer>> res = new ArrayList<>();
        dfs(1, n, k, res, new ArrayList<>());
        return res;
    }
	
	
	private void dfs(int start, int end, int k, List<List<Integer>> res, List<Integer> path) {
		if (end - start + 1 < k) {
			return;
		}
		
		if (k == 0) {
			res.add(new ArrayList<>(path));
			return;
		}
		
		
		for (int i=start; i<end; i++) {
			path.add(i);
			dfs(i+1, end, k-1, res, path);
			path.remove(path.size()-1);
		}
	}
	
}
